export {}

// 1. 函数设置类型
/*
 js中函数存在的缺点:
 1) 实参和形参个数可以不一致
 2) 对参数的类型没有约束
*/
// 1.1  函数的参数必须设置类型
function sum(a: number, b: number) {
  return a + b
}
console.log(sum(100, 200))

// 1.2 函数的返回值可以不加类型, TS的类型推导会推出返回值的类型
function getIndex(arr: number[], value: number) {
  return arr.findIndex((item) => item === value)
}
getIndex([1, 2, 3, 4, 5], 1)

// 1.3 函数表达式
const loginFc = (username: string, password: string) => {
  if (username === 'admin' && password === '123456') {
    return true
  } else {
    return false
  }
}
loginFc('admin', '123456')
type loginFunc = (username: string, password: string) => boolean
const loginFc2: loginFunc = (username, password) => {
  if (username === 'admin' && password === '123456') {
    return true
  } else {
    return false
  }
}
loginFc2('admin', '123456')

// 1.4 可选
function str(str1: string, str2?: string) {
  return str1 + str2
}
console.log(str('好', '难受'))
console.log(str('不舒服'))

// 1.5 没有返回值 void

function eachArr(arr: string[]) {
  arr.forEach((item) => {
    console.log(item)
  })
}
eachArr(['张三', '李四'])

// 小练习
function arr2string(arr: string[], s: string) {
  return arr.join(s)
}
console.log(arr2string(['1', '2', '3', '4'], '-'))
